// 操作数据库暴露出来的接口  

const mongoose = require("mongoose"); // 获取mongoose
const rp = require("request-promise"); //专门做服务端请求
const fs = require("fs");
const path = require("path");
// 内置模块 file-system  unlink删除的方法
const util = require("util");
// 解决unlink的异步
const unlink = util.promisify(fs.unlink);

const baseUrl = "http://localhost:3001";

// 拿到电影ID和url路径
const update = async (data) => {
    const { _id, url } = data;
    var options = {
        method: "PATCH",  //增加/修改电影数据 
        uri: ` ${baseUrl}/cinemas/${_id}`, //操作学生列表下的ID下的用户数据
        body: {
            // 用push的方法 把imgs以push的方式放在url里
            $push: {
                imgs: url,
            },
        },
        json: true, // Automatically stringifies the body to JSON
    };
    //捕捉异常    
    try {
        return await rp(options);
    } catch (error) {
        return error
    }

};

// 拿到电影海报ID和url路径
const updatePoster = async (data) => {
    const { _id, url } = data;
    var options = {
        method: "PATCH",  //增加/修改电影数据 
        uri: ` ${baseUrl}/cinemas/${_id}`, //操作电影列表下的ID下的用户数据
        body: {
            // 用push的方法 把imgs以push的方式放在url里
            $set: {
                poster: url,
            },
        },
        json: true, 
    };
    //捕捉异常    
    try {
        return await rp(options);
    } catch (error) {
        return error
    }
};


// 删除图片
const deleteImg = async ({ _id, url }) => {
    // __dirname全局对象 显示当前文件的绝对路径 
    // path.resolve将绝对路径返回到public目录 解析当前路径 
    const routesPath = path.resolve(__dirname, "../public");
    const imgUrl = path.join(routesPath, url); //path.join 把括号里的内容拼接在一起
    await unlink(imgUrl); //unlink解除链接
    // 解除关联数据
    var options = {
        method: "DELETE",  //删除数据
        uri: ` ${baseUrl}/cinemas/${_id}/imgs/${encodeURIComponent(url)}`, //操作学生列表下的ID下的用户数据
        json: true, // Automatically stringifies the body to JSON
    };
    // 捕捉接口异常
    return await rp(options);
}

// 暴露方法接口
module.exports = { update, deleteImg, updatePoster };